<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Source</name>
    </assembly>
    <members>
        <member name="T:DomainObject`2">
            <devdoc>
            Provides additional behavior to the Event Sourcing package DomainObject partial class 
            to allow auto wiring of event handlers by using 
            </devdoc>
            <nuget id="netfx-Patterns.EventSourcing.AutoWire" />
            <summary>
            Base class for domain classes that raise and optionally consume 
            event objects in an event sourcing pattern style implementation.
            </summary>
            <typeparam name="TObjectId">The type of identifier used by the domain object.</typeparam>
            <typeparam name="TBaseEvent">The base type or interface implemented by events.</typeparam>
            <nuget id="netfx-Patterns.EventSourcing" />
        </member>
        <member name="M:DomainObject`2.AutoWireHandlers">
            <summary>
            As an alternative to explicitly calling <see cref="M:DomainObject`2.Handles``1(System.Action{``0})"/> 
            from your aggregate root constructor to specify the handlers 
            for each type of event, this method will use reflection (once per type)
            to discover the handlers for events by looking for void methods with 
            a single parameter inheriting from <typeparamref name="TBaseEvent"/>
            and registering that with the <see cref="M:DomainObject`2.Handles``1(System.Action{``0})"/> method like 
            you would do manually.
            </summary>
            <devdoc>
            This code will hurt your eyes, but it's tunned for performance so that 
            it's as close to your own manually configured handlers as possible. 
            This is the reason why this was created as a separate optional 
            package and not part of the very simple aggregate root for plain 
            event sourcing. 
            Perf. is about 8-15x slower than manual code, but still 5x faster than 
            cached compiled lambdas and orders of magnitude than plain reflection.
            </devdoc>
        </member>
        <member name="M:DomainObject`2.BuildInitializer">
            <devdoc>
            This code was tweaked from the base generated by 
            the Reflection.Emit language adding to Reflector 7, 
            which is the only practical way of using this way 
            of codegen. Install from http://kzu.to/nN0iPu
            </devdoc>
        </member>
        <member name="M:DomainObject`2.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:DomainObject`2"/> class.
            </summary>
            <remarks>
            Derived classes decide if they allow direct instantiation or 
            if instantiation always has to happen from a stream of events.
            </remarks>
        </member>
        <member name="M:DomainObject`2.AcceptEvents">
            <summary>
            Clears the internal events retrieved from <see cref="M:DomainObject`2.GetEvents"/>, 
            signaling that all pending events have been commited.
            </summary>
        </member>
        <member name="M:DomainObject`2.GetEvents">
            <summary>
            Gets the new events that were applied by the domain object.
            </summary>
        </member>
        <member name="M:DomainObject`2.Handles``1(System.Action{``0})">
            <summary>
            Configures a handler for an event. 
            </summary>
        </member>
        <member name="M:DomainObject`2.Load(System.Collections.Generic.IEnumerable{`1})">
            <summary>
            Loads the the domain object from an even stream.
            </summary>
        </member>
        <member name="M:DomainObject`2.Apply``1(``0)">
            <summary>
            Applies an event to the entity. 
            The derived class should invoke <see cref="M:DomainObject`2.Handles``1(System.Action{``0})"/> 
            to configure the handlers for specific types of events. The 
            handlers perform the actual state changes to the entity.
            </summary>
        </member>
        <member name="P:DomainObject`2.Id">
            <summary>
            Gets or sets the identifier of the domain object.
            </summary>
        </member>
        <member name="T:DictionaryGetOrAdd">
            <summary>
            Adds a key/value pair to the <see cref="T:System.Collections.Generic.IDictionary`2"/> if the key does not already exist. 
            </summary>
        </member>
        <member name="M:DictionaryGetOrAdd.GetOrAdd``2(System.Collections.Generic.IDictionary{``0,``1},``0,System.Func{``0,``1})">
            <summary>
            Adds a key/value pair to the <see cref="T:System.Collections.Generic.IDictionary`2"/> if the key does not already exist. 
            No locking occurs, so the value may be calculated twice on concurrent scenarios. If you need 
            concurrency assurances, use a concurrent dictionary instead.
            </summary>
            <nuget id="netfx-System.Collections.Generic.DictionaryGetOrAdd"/>
            <param name="dictionary" this="true">The dictionary where the key/value pair will be added</param>
            <param name="key">The key to be added to the dictionary</param>
            <param name="valueFactory">The value factory</param>
        </member>
        <member name="T:EventQueryCriteria`1">
            <summary>
            Represents the filter criteria for a domain event store query.
            </summary>
            <typeparam name="TObjectId">The type of identifier used by the domain objects in the domain.</typeparam>
            <nuget id="netfx-Patterns.EventSourcing"/>
        </member>
        <member name="M:EventQueryCriteria`1.#ctor">
            <summary>
            Initializes a new instance of the <see cref="T:EventQueryCriteria`1"/> class.
            </summary>
        </member>
        <member name="P:EventQueryCriteria`1.ObjectInstances">
            <summary>
            List of source object type + instance identifier filters. The two filters 
            should be considered by event stores as AND'ed (i.e. 
            events for <c>Product AND Id = 5</c>) and each entry is OR'ed with the 
            others (i.e. <c>(Product AND Id = 5) OR (Order AND Id = 1)</c>.
            </summary>
        </member>
        <member name="P:EventQueryCriteria`1.ObjectTypes">
            <summary>
            List of object type filters. All types added are OR'ed with the 
            others (i.e. <c>ObjectType == Product OR ObjectType == Order</c>).
            </summary>
            <remarks>
            To filter by object type and identifier, 
            use <see cref="P:EventQueryCriteria`1.ObjectInstances"/> instead.
            </remarks>
        </member>
        <member name="P:EventQueryCriteria`1.EventTypes">
            <summary>
            List of event type filters. All types added are OR'ed with the 
            others (i.e. <c>EventType == ProductCreated OR EventType == ProductPublished</c>).
            </summary>
        </member>
        <member name="P:EventQueryCriteria`1.Since">
            <summary>
            Filters events that happened after the given starting date.
            </summary>
        </member>
        <member name="P:EventQueryCriteria`1.Until">
            <summary>
            Filters events that happened before the given ending date.
            </summary>
        </member>
        <member name="P:EventQueryCriteria`1.IsExclusiveRange">
            <summary>
            If set to <see langword="true"/>, <see cref="P:EventQueryCriteria`1.Since"/> and <see cref="P:EventQueryCriteria`1.Until"/> should 
            be considered as exclusive ranges (excludes values with a matching date). 
            Defaults to <see langword="false"/>, meaning that ranges are inclusive by default.
            </summary>
        </member>
        <member name="T:EventQueryCriteria`1.ObjectFilter">
            <summary>
            Filter criteria containing the object type and identifier. 
            </summary>
        </member>
        <member name="M:EventQueryCriteria`1.ObjectFilter.#ctor(System.Type,`0)">
            <summary>
            Initializes a new instance of the <see cref="T:EventQueryCriteria`1.ObjectFilter"/> class.
            </summary>
            <param name="objectType">Type of the event source to filter by.</param>
            <param name="objectId">The domain object identifier to filter by.</param>
        </member>
        <member name="P:EventQueryCriteria`1.ObjectFilter.ObjectType">
            <summary>
            Gets or sets the type of the domain object to filter by.
            </summary>
        </member>
        <member name="P:EventQueryCriteria`1.ObjectFilter.ObjectId">
            <summary>
            Gets or sets the domain object identifier to filter by.
            </summary>
        </member>
        <member name="T:Guard">
            <summary>
            Common guard class for argument validation.
            </summary>
        </member>
        <member name="M:Guard.NotNull``1(System.Linq.Expressions.Expression{System.Func{``0}},``0)">
            <summary>
            Ensures the given <paramref name="value"/> is not null.
            Throws <see cref="T:System.ArgumentNullException"/> otherwise.
            </summary>
        </member>
        <member name="M:Guard.NotNullOrEmpty(System.Linq.Expressions.Expression{System.Func{System.String}},System.String)">
            <summary>
            Ensures the given string <paramref name="value"/> is not null or empty.
            Throws <see cref="T:System.ArgumentNullException"/> in the first case, or 
            <see cref="T:System.ArgumentException"/> in the latter.
            </summary>
        </member>
        <member name="T:IEventStore`2">
            <summary>
            Interface implemented by domain event stores.
            </summary>
            <typeparam name="TObjectId">The type of identifier used by the domain objects in the domain.</typeparam>
            <typeparam name="TBaseEvent">The base type or interface implemented by events in the domain.</typeparam>
            <nuget id="netfx-Patterns.EventSourcing"/>
        </member>
        <member name="M:IEventStore`2.SaveChanges(DomainObject{`0,`1})">
            <summary>
            Saves the pending changes in the domain object and accepts 
            the changes.
            </summary>
            <param name="entity">The domain object raising the event.</param>
        </member>
        <member name="M:IEventStore`2.Query(EventQueryCriteria{`0})">
            <summary>
            Queries the event store for events that match the given criteria.
            </summary>
            <remarks>
            Store implementations are advised to provide full support for the 
            specified criteria, but aren't required to.
            <para>
            An alternative fluent API to build the criteria object is available 
            by executing the  <see cref="M:EventQueryExtension.Query``2(IEventStore{``0,``1})"/> 
            extension method on an event store instance.
            </para>
            </remarks>
        </member>
        <member name="T:EventQueryExtension">
            <summary>
            Provides the entry point <see cref="M:EventQueryExtension.Query``2(IEventStore{``0,``1})"/> for a fluent API 
            that makes querying event stores easier.
            </summary>
            <nuget id="netfx-Patterns.EventSourcing"/>
        </member>
        <member name="M:EventQueryExtension.Query``2(IEventStore{``0,``1})">
            <summary>
            Queries the event store for events that match specified 
            criteria via the returned fluent API methods 
            <see cref="M:EventQueryExtension.IEventQuery`2.For``1"/> and 
            <see cref="M:EventQueryExtension.IEventQuery`2.OfType``1"/>. 
            </summary>
            <typeparam name="TObjectId">The type of identifier used by the domain objects in the domain.</typeparam>
            <typeparam name="TBaseEvent">The base type or interface implemented by events in the domain.</typeparam>
            <param name="store">The domain event store.</param>
        </member>
        <member name="T:EventQueryExtension.IEventQuery`2">
            <summary>
            Provides a fluent API to filter events from the event store. 
            </summary>
            <remarks>
            This interface is returned from the <see cref="M:EventQueryExtension.Query``2(IEventStore{``0,``1})"/> 
            extension method for <see cref="T:IEventStore`2"/>.
            </remarks>
            <typeparam name="TObjectId">The type of identifier used by the domain objects in the domain.</typeparam>
            <typeparam name="TBaseEvent">The base type or interface implemented by events in the domain.</typeparam>
            <nuget id="netfx-Patterns.EventSourcing"/>
        </member>
        <member name="M:EventQueryExtension.IEventQuery`2.Execute">
            <summary>
            Executes the query built using the fluent API 
            against the underlying store.
            </summary>
        </member>
        <member name="M:EventQueryExtension.IEventQuery`2.For``1">
            <summary>
            Filters events that target the given domain object type. Can be called 
            multiple times and will filter for any of the specified types (OR operator).
            </summary>
            <typeparam name="TObject">The type of the domain object to filter events for.</typeparam>
        </member>
        <member name="M:EventQueryExtension.IEventQuery`2.For``1(`0)">
            <summary>
            Filters events that target the given domain object type and identifier. Can be called 
            multiple times and will filter for any of the specified types and ids (OR operator).
            </summary>
            <typeparam name="TObject">The type of the domain object to filter events for.</typeparam>
            <param name="objectId">The domain object identifier to filter by.</param>
        </member>
        <member name="M:EventQueryExtension.IEventQuery`2.OfType``1">
            <summary>
            Filters events that are assignable to the given type. Can be called 
            multiple times and will filter for any of the specified types (OR operator).
            </summary>
            <typeparam name="TEvent">The type of the events to filter.</typeparam>
        </member>
        <member name="M:EventQueryExtension.IEventQuery`2.Since(System.DateTimeOffset)">
            <summary>
            Filters events that happened after the given starting date.
            </summary>
            <param name="when">The starting date to filter by.</param>
            <remarks>
            By default, includes events with the given date, unless the 
            <see cref="M:EventQueryExtension.IEventQuery`2.ExclusiveRange"/> is called to make the range exclusive.
            </remarks>
        </member>
        <member name="M:EventQueryExtension.IEventQuery`2.Until(System.DateTimeOffset)">
            <summary>
            Filters events that happened before the given ending date.
            </summary>
            <param name="when">The ending date to filter by.</param>
            <remarks>
            By default, includes events with the given date, unless the 
            <see cref="M:EventQueryExtension.IEventQuery`2.ExclusiveRange"/> is called to make the range exclusive.
            </remarks>
        </member>
        <member name="M:EventQueryExtension.IEventQuery`2.ExclusiveRange">
            <summary>
            Makes the configured <see cref="M:EventQueryExtension.IEventQuery`2.Since(System.DateTimeOffset)"/> and/or <see cref="M:EventQueryExtension.IEventQuery`2.Until(System.DateTimeOffset)"/> dates 
            exclusive, changing the default behavior which is to be inclusive.
            </summary>
        </member>
    </members>
</doc>
